b61cc9389219a62ea02067e9e05bae4c3ae37936,lifecyclebinder-processor/src/main/java/it/codingjam/lifecyclebinder/BinderGenerator.java,BinderGenerator,generateBindMethod,#LifeCycleAwareInfo#TypeName#,129

Before Change



    private MethodSpec generateBindMethod(LifeCycleAwareInfo lifeCycleAwareInfo, TypeName objectGenericType) {
        MethodSpec.Builder builder = MethodSpec.methodBuilder("bind")
                .addModifiers(PUBLIC, STATIC)
                .returns(void.class)
                .addParameter(ClassName.get(LifeCycleAwareCollector.class), "collector")
                .addParameter(objectGenericType, "view", FINAL)
                .addCode(generateBindMethodBody(lifeCycleAwareInfo));

After Change



    private MethodSpec generateBindMethod(LifeCycleAwareInfo lifeCycleAwareInfo, TypeName objectGenericType) {
        boolean implementsLifeCycleAware = implementsLifeCycleAware(ClassName.get(lifeCycleAwareInfo.element.asType()));
        MethodSpec.Builder builder = MethodSpec.methodBuilder("bind").addModifiers(PUBLIC, STATIC);
        String lifeCycleAwareVariableName;
        boolean nestedObject;
        if (implementsLifeCycleAware) {
            builder = builder
                    .returns(objectGenericType)
                    .addParameter(ClassName.get(LifeCycleAwareCollector.class), "collector")
                    .addParameter(objectGenericType, "lifeCycleAware")
                    .addParameter(String.class, "key")
                    .addParameter(ParameterizedTypeName.get(ClassName.get(Callable.class), objectGenericType), "factory")
                    .addParameter(TypeName.BOOLEAN, "addInList");
            builder.addStatement("$T ret = collector.getOrCreate(lifeCycleAware, key, factory)", objectGenericType);
            lifeCycleAwareVariableName = "ret";
            nestedObject = true;
        } else {
            builder = builder
                    .returns(void.class)
                    .addParameter(ClassName.get(LifeCycleAwareCollector.class), "collector")
                    .addParameter(objectGenericType, "view", FINAL);
            lifeCycleAwareVariableName = "view";
            nestedObject = false;
        }

        builder = builder.addCode(generateBindMethodBody(lifeCycleAwareVariableName, lifeCycleAwareInfo, nestedObject));

        if (implementsLifeCycleAware) {
            builder
                    .beginControlFlow("if (addInList)")
                    .addStatement("collector.addLifeCycleAware(ret)")
                    .endControlFlow()
                    .addStatement("return ret");
        }